//mdp: projetISEP
package projet_isep;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Random;

public class Projet_ISEP {

    private static int[][] grille = new int[10][11];

    public static void main(String[] args) {
        menuPrincipal();
    }//main

    private static void menuPrincipal() {
        int choixMenu;

        System.out.println("Bienvenue! Voici le menu: ");
        System.out.println("1. Lancer une partie");
        System.out.println("2. Quitter");
        System.out.println("3. Crédits");

        Scanner sc = new Scanner(System.in);
        choixMenu = sc.nextInt();
        switch (choixMenu) {
            case 1:
                choixGrille();
                break;
            case 2:
                quitter();
                break;
            case 3:
                credits();
                break;
            default:
                System.out.println("Mauvaise action! Recommencez: " + "\n");
                menuPrincipal();
                break;
        }//switch
    }//menuPrincipal

    private static void choixGrille() {
        int choixDeLaGrille;

        System.out.println("Choisissez un type de grille: ");
        System.out.println("1. Basique");
        System.out.println("2. Boucle");
        System.out.println("3. Double boucle");
        System.out.println("4. Surface");

        Scanner sc = new Scanner(System.in);
        choixDeLaGrille = sc.nextInt();
        switch (choixDeLaGrille) {
            case 1:
                AffichageGrille.grilleBasiqueVide(grille);
                break;
            case 2:
                grilleBoucle();
                break;
            case 3:
                grilleDoubleBoucle();
                break;
            case 4:
                grilleSurface();
                break;
            default:
                System.out.println("Mauvaise action! Recommencez: " + "\n");
                choixGrille();
                break;
        }//switch
    }//choixGrille

    public static void lancerPartie() {
        
        //On initialise notre liste avec tous nos jetons
        ArrayList<Integer> listeJetons = new ArrayList();
        for(int i = 1; i <= 30; i++)
            listeJetons.add(i);
        for(int j = 11; j <= 19; j++)
            listeJetons.add(j);
        listeJetons.add(666);//JOKER = 666

        int choixInitialisation;

        System.out.println("\nQuelle initialisation désirez-vous?");
        System.out.println("1. Initialisation automatique.");
        System.out.println("2. Initialisation manuelle.");

        Scanner sc = new Scanner(System.in);
        choixInitialisation = sc.nextInt();
        switch (choixInitialisation) {
            case 1:
                initialisationAutomatique(listeJetons, 0);
                break;
            case 2:
                initialisationManuelle(listeJetons);
                break;
            default:
                System.out.println("Mauvaise action! Recommencez: " + "\n");
                lancerPartie();
                break;
        }//switch
    }//lancerPartie

    private static void quitter() {
        System.exit(0);
    }//quitter

    private static void credits() {
        System.out.print("Ce programme a été réalisé dans le cadre du projet de JAVA au sein de l'ISEP par Gauthier VUONG et Aurélien PAUTRAT.");
    }//credits
    
    private static void initialisationAutomatique(ArrayList<Integer> listeJetons, int graineIni)
    {
        boolean grillePleine = true;
        
        if(graineIni == 0)
        {
            Random graine = new Random();
            graineIni = graine.nextInt(100);
            System.out.println("La graine d'initialisation est de : " + graineIni + " .");
        }
        
        Random r = new Random(graineIni);
        
        int indiceAlea = r.nextInt(listeJetons.size());//indice aléatoire entre les bornes de la liste
        int chiffreAlea = listeJetons.get(indiceAlea);
        if(chiffreAlea == 666)
            System.out.println("Vous avez pioché un Joker!");
        else
            System.out.println("Vous avez pioché ce nombre: " + chiffreAlea);
        
        listeJetons.remove(indiceAlea);//On retire le jeton que l'on vient de piocher
        
        //On vérifie que la grille ne soit pas pleine
        for (int k = 0; k < grille.length; k++) 
        {
            for (int l = 0; l < grille.length; l++) 
            {
                if (grille[k][l] == -1)
                    grillePleine = false;
            }
        }
        if (grillePleine == false) 
        {
            placerJeton(chiffreAlea);
            initialisationAutomatique(listeJetons, graineIni + 1);
        } 
        else 
        {
            System.out.println("Vous avez rempli toute la grille! Place aux resultats!");
            Resultats.resultats(grille);
        }
    }
    
    private static void initialisationManuelle(ArrayList<Integer> listeJetons) 
    {
        System.out.println("Vous avez choisi l'initialisation manuelle.");
        System.out.println("Veuillez entrer la graine d'initialisation: ");
        Scanner sc = new Scanner(System.in);
        
        int graineIni = sc.nextInt();
        initialisationAutomatique(listeJetons, graineIni);
        
    }//initialisationManuelle

    private static void placerJeton(int chiffreAlea) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Entrez les coordonnées de là où vous voulez placer le jeton: (sous la forme F08)");
        String res = sc.next();

        if (res.length() != 3)//on vérifie que l'entrée utilisateur est correcte
        {
            System.out.println("Attention, entrez les coordonnées sous la forme F08!");
            placerJeton(chiffreAlea);
        } else {
            //Pour la lettre, aucun problème, on recupere le premier caractere
            char coordLettre = res.charAt(0);

            //Pour le chiffe, on recupere les caracteres de la ligne puis on les cast en string pour pouvoir recuperer le int qu'on veut
            char coordChiffreChar1 = res.charAt(1);
            char coordChiffreChar2 = res.charAt(2);
            String coordChiffreString = Character.toString(coordChiffreChar1) + Character.toString(coordChiffreChar2);
            int coordChiffre = Integer.parseInt(coordChiffreString);

            System.out.println(coordChiffre);

            int x = 10 - coordChiffre;
            int y = 0;

            switch (coordLettre) {
                case 'A':
                    y = 0;
                    break;
                case 'B':
                    y = 1;
                    break;
                case 'C':
                    y = 2;
                    break;
                case 'D':
                    y = 3;
                    break;
                case 'E':
                    y = 4;
                    break;
                case 'F':
                    y = 5;
                    break;
                case 'G':
                    y = 6;
                    break;
                case 'H':
                    y = 7;
                    break;
                case 'I':
                    y = 8;
                    break;
                case 'J':
                    y = 9;
                    break;
                case 'a':
                    y = 0;
                    break;
                case 'b':
                    y = 1;
                    break;
                case 'c':
                    y = 2;
                    break;
                case 'd':
                    y = 3;
                    break;
                case 'e':
                    y = 4;
                    break;
                case 'f':
                    y = 5;
                    break;
                case 'g':
                    y = 6;
                    break;
                case 'h':
                    y = 7;
                    break;
                case 'i':
                    y = 8;
                    break;
                case 'j':
                    y = 9;
                    break;
                default:
                    System.out.println("Mauvaise entrée! Veuillez recommencer.");
                    placerJeton(chiffreAlea);
                    break;
            }//switch

            //On vérifie qu'il n'y ait pas deja de jeton à l'emplacement entré par l'utilisateur
            if (grille[x][y] == -1) 
            {
                grille[x][y] = chiffreAlea;
                AffichageGrille.afficheGrille(grille);
            } else {
                System.out.println("Attention, il y a deja un jeton à cet emplacement!");
            }
        }
    }//placerJeton

    private static void grilleBoucle() {
        throw new UnsupportedOperationException("Not yet implemented");
    }//grilleBoucle

    private static void grilleDoubleBoucle() {
        throw new UnsupportedOperationException("Not yet implemented");
    }//grilleDoubleBoucle

    private static void grilleSurface() {
        throw new UnsupportedOperationException("Not yet implemented");
    }//grilleSurface
}//class
